package com.itheima.pattern.t16_state.before;

/**
 * 电梯类
 */
public class Lift implements ILift {

    // 声明一个记录当前电梯的状态
    private int state;

    @Override
    public void setState(int state) {
        this.state = state;
    }

    // 执行开门动作
    @Override
    public void open() {
        switch (state) {
            case OPENNING_STATE:
                // 什么事都不做
                break;
            case CLOSING_STATE:
                System.out.println("电梯打开了...");
                // 设置当前电梯状态为开启状态
                setState(OPENNING_STATE);
                break;
            case RUNNING_STATE:
                // 什么事都不做
                break;
            case STOPPING_STATE:
                System.out.println("电梯打开了...");
                // 设置当前电梯状态为开启状态
                setState(OPENNING_STATE);
                break;
        }
    }

    // 执行关门动作
    @Override
    public void close() {
        switch (state) {
            case OPENNING_STATE:
                System.out.println("电梯关门了...");
                // 设置当前电梯状态为关闭状态
                setState(CLOSING_STATE);
                break;
            case CLOSING_STATE:
                // 什么事都不做
                break;
            case RUNNING_STATE:
                // 什么事都不做
                break;
            case STOPPING_STATE:
                // 什么事都不做
                break;
        }
    }

    // 执行运行动作
    @Override
    public void run() {
        switch (state) {
            case OPENNING_STATE:
                // 什么事都不做
                break;
            case CLOSING_STATE:
                System.out.println("电梯开始运行了...");
                // 设置当前电梯状态为运行状态
                setState(RUNNING_STATE);
                break;
            case RUNNING_STATE:
                // 什么事都不做
                break;
            case STOPPING_STATE:
                System.out.println("电梯开始运行了...");
                // 设置当前电梯状态为运行状态
                setState(RUNNING_STATE);
                break;
        }
    }

    // 执行关闭动作
    @Override
    public void stop() {
        switch (state) {
            case OPENNING_STATE:
                // 什么事都不做
                break;
            case CLOSING_STATE:
                System.out.println("电梯停止了...");
                // 设置当前电梯状态为停止状态
                setState(STOPPING_STATE);
                break;
            case RUNNING_STATE:
                System.out.println("电梯停止了...");
                // 设置当前电梯状态为停止状态
                setState(STOPPING_STATE);
                break;
            case STOPPING_STATE:
                // 什么事都不做
                break;
        }
    }
}
